//
//  RequestUntil.h
//  ukongmapp
//
//  Created by ukongm on 16/7/25.
//  Copyright © 2016年 youmeng. All rights reserved.
//

#import <Foundation/Foundation.h>
#pragma mark - 提示
/** 网络不稳定的提示 */
static NSString* const NETWORK_FAIL_TIP = @"请检查网络设置";

#pragma mark - 上传文件类型
/** 图片 */
static NSString* const FILE_IMAGE_JPG = @"image/jpeg";
/** 图片 */
static NSString* const FILE_IMAGE_PNG = @"image/png";
/** 流 */
static NSString* const FILE_STREAM = @"application/octet-stream";
/** html格式 */
static NSString* const FILE_HTML = @"text/html";
/** json格式 */
static NSString* const FILE_JSON = @"application/json";
/** 文本json格式 */
static NSString* const FILE_TEXT_JSON = @"text/json";

//主域名
//#define MAIN_URL @"http://rest.chca.com/v0.1/"
#define MAIN_URL @"http://120.77.250.107/"


#pragma mark - 回调block

typedef void(^success)(NSData* data,NSString* mark);
typedef void(^fail)(NSError* error,NSString* mark);
typedef void(^handle)(NSString* mark);

#pragma mark - 协议
@protocol RequestDelegate <NSObject>

@optional
/**
 *  请求成功的回调
 *
 *  @param data 数据
 *  @param mark 标记
 */
- (void)succeed:(NSData*)data andMark:(NSString*)mark;

/**
 *  请求失败
 *
 *  @param error 错误信息
 *  @param mark  标记
 */
- (void)fail:(NSError*)error andMark:(NSString*)mark;

/**
 *  不管成功还是失败都会调用的方法
 */
- (void)handle;

@end


/**
 *  这个class主要用于请求数据，进行参数的拼接，以及请求网络数据
 */
@interface RequestUntil : NSObject

//代理指针
@property(nonatomic,weak)id<RequestDelegate> delegate;

//block回调，设置了block的回调方法，将不会调用代理
@property(nonatomic,copy)success successComplate;
@property(nonatomic,copy)fail failComplate;
@property(nonatomic,copy)handle handleComplate;
- (void)setComplateBlockForSuccess:(success)successComplate fail:(fail)failComplate handle:(handle)handleComplate;

//发送post请求时候的参数
@property(nonatomic,strong)NSMutableString* paramStr;
@property(nonatomic,strong)NSMutableDictionary* dict;

/**
 *  这个方法在创建对象的时候，选择是否加载基本的信息
 *
 *  @return 对象
 */
- (instancetype)initWithBool:(BOOL)isInit;

/**
 *  这个是添加参数的方法
 *
 *  @param value 参数值
 *  @param key   参数名
 */
- (void)addParam:(NSString*)value andKey:(NSString*)key;

/**
 *  开始进行网络请求，在拼接参数之后调用
 *
 *  @param subPath 主域名下面的目录
 *  @param mark    标记
 */
- (void)postWithSubPath:(NSString*)subPath andMark:(NSString*)mark;


#pragma mark 文件相关

/**
 添加上传的文件

 @param data     文件数据
 @param key      上传的对应的参数名
 @param fileName 文件名
 @param type     文件格式(本文件上方有对应的封装)
 */
- (void)addParam:(NSData *)data andKey:(NSString *)key fileName:(NSString*)fileName type:(NSString*)type;
- (void)uploadWithSubPath:(NSString*)subPath contentType:(NSSet*)set mark:(NSString*)mark;


@end


//线程管理
@interface ThreadManager : NSObject

/**
 *  在主线程中执行一段代码
 *
 *  @param block 代码块
 */
+ (void)handleCodeForMain:(void(^)())block;

/**
 *  在子线程执行一段代码
 *
 *  @param block 代码块
 */
+ (void)handleCodeForAsync:(void(^)())block;


/**
 开启定时器

 @param block 执行的代码
 */
+ (void)handleCodeForTime:(CGFloat)time andTimer:(void(^)(dispatch_source_t timer))block;


@end
